(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){factory($,window,document);});}else{factory(jQuery,window,document);}})(function($,window,document,undefined){"use strict";var pluginName="intlTelInput",id=1,defaults={autoFormat:true,autoHideDialCode:true,defaultCountry:"",ipinfoToken:"",nationalMode:false,numberType:"MOBILE",onlyCountries:[],preferredCountries:["us","gb"],responsiveDropdown:false,utilsScript:""},keys={UP:38,DOWN:40,ENTER:13,ESC:27,PLUS:43,A:65,Z:90,ZERO:48,NINE:57,SPACE:32,BSPACE:8,DEL:46,CTRL:17,CMD1:91,CMD2:224},windowLoaded=false;$(window).load(function(){windowLoaded=true;});function Plugin(element,options){this.element=element;this.options=$.extend({},defaults,options);this._defaults=defaults;this.ns="."+pluginName+id++;this.isGoodBrowser=Boolean(element.setSelectionRange);this.hadInitialPlaceholder=Boolean($(element).attr("placeholder"));this._name=pluginName;this.init();} Plugin.prototype={init:function(){var that=this;if(this.options.defaultCountry=="auto"){this.options.defaultCountry="";var ipinfoURL="//ipinfo.io";if(this.options.ipinfoToken){ipinfoURL+="?token="+this.options.ipinfoToken;} $.get(ipinfoURL,function(response){if(response&&response.country){that.options.defaultCountry=response.country.toLowerCase();}},"jsonp").always(function(){that._ready();});}else{this._ready();}},_ready:function(){if(this.options.nationalMode){this.options.autoHideDialCode=false;} if(navigator.userAgent.match(/IEMobile/i)){this.options.autoFormat=false;} if(window.innerWidth<500){this.options.responsiveDropdown=true;} this._processCountryData();this._generateMarkup();this._setInitialState();this._initListeners();},_processCountryData:function(){this._setInstanceCountryData();this._setPreferredCountries();},_addCountryCode:function(iso2,dialCode,priority){if(!(dialCode in this.countryCodes)){this.countryCodes[dialCode]=[];} var index=priority||0;this.countryCodes[dialCode][index]=iso2;},_setInstanceCountryData:function(){var i;if(this.options.onlyCountries.length){this.countries=[];for(i=0;i",{"class":"intl-tel-input"}));var flagsContainer=$("
",{"class":"flag-dropdown"}).insertAfter(this.telInput);var selectedFlag=$("
",{"class":"selected-flag"}).appendTo(flagsContainer);this.selectedFlagInner=$("
",{"class":"flag"}).appendTo(selectedFlag);$("
",{"class":"arrow"}).appendTo(this.selectedFlagInner);this.countryList=$("
    ",{"class":"country-list v-hide"}).appendTo(flagsContainer);if(this.preferredCountries.length){this._appendListItems(this.preferredCountries,"preferred");$("
  • ",{"class":"divider"}).appendTo(this.countryList);} this._appendListItems(this.countries,"");this.dropdownHeight=this.countryList.outerHeight();this.countryList.removeClass("v-hide").addClass("hide");if(this.options.responsiveDropdown){this.countryList.outerWidth(this.telInput.outerWidth());} this.countryListItems=this.countryList.children(".country");},_appendListItems:function(countries,className){var tmp="";for(var i=0;i";tmp+="
    ";tmp+=""+c.name+"";tmp+="+"+c.dialCode+"";tmp+="
  • ";} this.countryList.append(tmp);},_setInitialState:function(){var val=this.telInput.val();if(this._getDialCode(val)){this._updateFlagFromNumber(val);}else{var defaultCountry;if(this.options.defaultCountry){defaultCountry=this._getCountryData(this.options.defaultCountry,false,false);}else{defaultCountry=this.preferredCountries.length?this.preferredCountries[0]:this.countries[0];} this._selectFlag(defaultCountry.iso2);if(!val){this._updateDialCode(defaultCountry.dialCode,false);}} if(val){this._updateVal(val,false);}},_initListeners:function(){var that=this;this._initKeyListeners();if(this.options.autoHideDialCode||this.options.autoFormat){this._initFocusListeners();} var label=this.telInput.closest("label");if(label.length){label.on("click"+this.ns,function(e){if(that.countryList.hasClass("hide")){that.telInput.focus();}else{e.preventDefault();}});} var selectedFlag=this.selectedFlagInner.parent();selectedFlag.on("click"+this.ns,function(e){if(that.countryList.hasClass("hide")&&!that.telInput.prop("disabled")){that._showDropdown();}});if(this.options.utilsScript){if(windowLoaded){this.loadUtils();}else{$(window).load(function(){that.loadUtils();});}}},_initKeyListeners:function(){var that=this;if(this.options.autoFormat){this.telInput.on("keypress"+this.ns,function(e){if(e.which>=keys.SPACE&&!e.metaKey&&window.intlTelInputUtils){e.preventDefault();var isAllowedKey=e.which>=keys.ZERO&&e.which<=keys.NINE||e.which==keys.PLUS,input=that.telInput[0],noSelection=that.isGoodBrowser&&input.selectionStart==input.selectionEnd,max=that.telInput.attr("maxlength"),isBelowMax=max?that.telInput.val().lengthwindowTop;var cssTop=!dropdownFitsBelow&&dropdownFitsAbove?"-"+(this.dropdownHeight-1)+"px":"";this.countryList.css("top",cssTop);},_bindDropdownListeners:function(){var that=this;this.countryList.on("mouseover"+this.ns,".country",function(e){that._highlightListItem($(this));});this.countryList.on("click"+this.ns,".country",function(e){that._selectListItem($(this));});var isOpening=true;$("html").on("click"+this.ns,function(e){if(!isOpening){that._closeDropdown();} isOpening=false;});var query="",queryTimer=null;$(document).on("keydown"+this.ns,function(e){e.preventDefault();if(e.which==keys.UP||e.which==keys.DOWN){that._handleUpDownKey(e.which);}else if(e.which==keys.ENTER){that._handleEnterKey();}else if(e.which==keys.ESC){that._closeDropdown();}else if(e.which>=keys.A&&e.which<=keys.Z||e.which==keys.SPACE){if(queryTimer){clearTimeout(queryTimer);} query+=String.fromCharCode(e.which);that._searchForCountry(query);queryTimer=setTimeout(function(){query="";},1e3);}});},_handleUpDownKey:function(key){var current=this.countryList.children(".highlight").first();var next=key==keys.UP?current.prev():current.next();if(next.length){if(next.hasClass("divider")){next=key==keys.UP?next.prev():next.next();} this._highlightListItem(next);this._scrollTo(next);}},_handleEnterKey:function(){var currentCountry=this.countryList.children(".highlight").first();if(currentCountry.length){this._selectListItem(currentCountry);}},_searchForCountry:function(query){for(var i=0;imax){formatted=formatted.substr(0,max);}}else{formatted=val;} this.telInput.val(formatted);},_updateFlagFromNumber:function(number){if(this.options.nationalMode&&this.selectedCountryData&&this.selectedCountryData.dialCode=="1"&&number.substr(0,1)!="+"){number="+1"+number;} var dialCode=this._getDialCode(number);if(dialCode){var countryCodes=this.countryCodes[this._getNumeric(dialCode)],alreadySelected=false;if(this.selectedCountryData){for(var i=0;i=4;},_highlightListItem:function(listItem){this.countryListItems.removeClass("highlight");listItem.addClass("highlight");},_getCountryData:function(countryCode,ignoreOnlyCountriesOption,allowFail){var countryList=ignoreOnlyCountriesOption?allCountries:this.countries;for(var i=0;icontainerBottom){if(middle){newScrollTop+=middleOffset;} var heightDifference=containerHeight-elementHeight;container.scrollTop(newScrollTop-heightDifference);}},_updateDialCode:function(newDialCode,focusing){var inputVal=this.telInput.val(),newNumber;newDialCode="+"+newDialCode;if(this.options.nationalMode&&inputVal.substr(0,1)!="+"){newNumber=inputVal;}else if(inputVal){var prevDialCode=this._getDialCode(inputVal);if(prevDialCode.length>1){newNumber=inputVal.replace(prevDialCode,newDialCode);}else{var existingNumber=inputVal.substr(0,1)!="+"?$.trim(inputVal):"";newNumber=newDialCode+existingNumber;}}else{newNumber=!this.options.autoHideDialCode||focusing?newDialCode:"";} this._updateVal(newNumber,focusing);},_getDialCode:function(number){var dialCode="";if(number.charAt(0)=="+"){var numericChars="";for(var i=0;i